package com.aizuda.boot.modules.business.permission.provider;

import com.aizuda.boot.modules.business.contract.dto.SingleResponse;
import com.aizuda.boot.modules.business.permission.domain.request.AddRoleVO;
import com.aizuda.boot.modules.business.permission.domain.request.PageRoleVO;
import com.aizuda.boot.modules.business.permission.domain.request.QueryRoleListVo;
import com.aizuda.boot.modules.business.permission.domain.request.UpdateRoleVO;
import com.aizuda.boot.modules.business.permission.domain.response.OwnPermissionVO;
import com.aizuda.boot.modules.business.permission.domain.response.PageRoleResponseVO;
import com.aizuda.boot.modules.business.permission.domain.response.RoleBasicVO;
import com.aizuda.boot.modules.business.permission.domain.response.RoleShowVO;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;
import java.util.Map;

/**
 * Description: 角色业务
 *
 * @author duanyao
 * @date 2021-11-27 18:07
 *
 * <pre>
 *              悟智科技
 *      Copyright (c) 2021. All Rights Reserved.
 * </pre>
 */
public interface RoleProvider {

    /**
     * 修改角色权限状态
     * @param roleId
     * @return
     */
    SingleResponse<Void> enableRole(Long roleId);

    /**
     * 获取角色信息
     * @param roleId
     * @return
     */
    SingleResponse<RoleShowVO> getRole(Long roleId);

    /**
     * 新增角色
     *
     * @param addRoleVO
     * @return
     */
    SingleResponse<Void> addRole(AddRoleVO addRoleVO);

    /**
     * 分页查询角色信息
     *
     * @param page
     * @param pageRoleVO
     * @return
     */
    SingleResponse<IPage<PageRoleResponseVO>> pageRole(IPage<PageRoleResponseVO> page, PageRoleVO pageRoleVO);

    /**
     * 修改角色信息
     *
     * @param updateRoleVO
     * @return
     */
    SingleResponse<Void> updateRole(UpdateRoleVO updateRoleVO);

    /**
     * 获取当前用户的权限列表
     * @return
     */
    SingleResponse<List<RoleShowVO>> getCurrentRole();

    /**
     * 删除角色
     * @param roleId
     * @return
     */
    SingleResponse<Void> deleteRole(Long roleId);

    /**
     * 获取角色列表
     * @return
     */
    SingleResponse<List<Map<String, String>>> getRoleListByType(QueryRoleListVo queryRoleListVo);

    /**
     * 获取角色基本信息
     * @param roleId
     * @return
     */
    SingleResponse<RoleBasicVO> getRoleBasicInfo(Long roleId);

    /**
     * 获取当前登录用户权限
     * @return
     */
    SingleResponse<OwnPermissionVO> getCurrentPermission();
}
